# Sweep Config

You can configure Sweep by modifying the `sweep.yaml` file, which should be in the root directory of your repository.

After making your first Sweep issue, Sweep will make a PR to add the config file for you. If it's not there, you can create it yourself and add the following default config file:

<details>
<summary>Default content for&nbsp;`sweep.yaml`</summary>
```yaml
# Sweep AI turns bugs & feature requests into code changes (https://sweep.dev)
# For details on our config file, check out our docs at https://docs.sweep.dev/usage/config

# This setting contains a list of rules that Sweep will check for. If any of these rules are broken in a new commit, Sweep will create an pull request to fix the broken rule.
rules:
- "All docstrings and comments should be up to date."
- "Leftover TODOs in the code should be handled."
- "All new business logic should have corresponding unit tests in the tests/ directory."
- "Any clearly inefficient or repeated code should be optimized or refactored."

# This is the branch that Sweep will develop from and make pull requests to. Most people use 'main' or 'master' but some users also use 'dev' or 'staging'.
branch: 'main'

# By default Sweep will read the logs and outputs from your existing Github Actions. To disable this, set this to false.
gha_enabled: True

# This is the description of your project. It will be used by sweep when creating PRs. You can tell Sweep what's unique about your project, what frameworks you use, or anything else you want.
#
# Example:
# description: sweepai/sweep is a python project. The main api endpoints are in sweepai/api.py. Write code that adheres to PEP8.
description: ''

# This sets whether to create pull requests as drafts. If this is set to True, then all pull requests will be created as drafts and GitHub Actions will not be triggered.
draft: False

# This is a list of directories that Sweep will not be able to edit. In our example, Sweep is unable to modify the .github folder as we do not want Sweep to modify our GitHub Actions.
blocked_dirs: [".github/"]
```

</details>

### Config Table
| Key | Type | Description |
| --- | --- | --- |
| `rules` | `list` | A list of specific guidelines that Sweep follows when making changes to your repository. These should be specific to your repository and mention any technologies you use. |
| `gha_enabled` | `bool` | Whether or not to enable GitHub Actions |
| `branch` | `str` | The branch to run on |
| `blocked_dirs` | `list` | A list of directories to ignore |
| `draft` | `bool` | Whether or not to create PRs as drafts |
| `description` | `str` | The description of the repository |

---

### `rules`
```yml
rules:
- "Leftover TODOs in the code should be handled."
- "All new business logic should have corresponding unit tests in the tests/ directory."
- "Any clearly inefficient or repeated code should be optimized or refactored."
- "All React components should have PropTypes defined."
- "Update the README.md file whenever a new feature is added. Make sure to include a description of the feature and any new commands."
- "Remove any console.log statements before committing JavaScript code."
- "All docstrings and comments should be up to date."
- "Python error logs should use loguru. If they are under an exception, they should use traceback."
- "We use unit tests for our code. If we have "class.py", we should have "class_test.py" in the same directory."
```

Sweep will check each pull request to see if any of these rules are broken. If so, Sweep will create a pull request to fix the broken rule.
These can also be applied to any pull requests in your repository. In this case Sweep will make the pull request against your pull request instead of your main branch.

#### Tips for writing rules:
##### 1. Rules should describe the technologies to use:

If you usually have to clean up logs, write `"Python error logs should use loguru. If they are under an exception, they should use traceback."`

##### 2. Rules should be specific in the type of change:

Don't say `"Update the README.md file whenever a new feature is added."`
Instead, say `"Update the README.md file whenever a new feature is added. Make sure to include a description of the feature and any new commands."`

##### 3. Tell Sweep where the new code should go:

`"We use unit tests for our code. If we have "class.py", we should have "class_test.py" in the same directory."`

### `gha_enabled`
```yaml
gha_enabled: True
```
Possible Values: True, False

This setting determines whether or not to enable GitHub Actions. If this is set to `False`, then Sweep will not read the results of GitHub Actions.

### `branch`
```yaml
branch: main
```
This setting determines which branch Sweep will develop from and make pull requests to.

### `blocked_dirs`
```yaml
blocked_dirs: [".github/", "other_dir"]
```
This setting lists all of the directories that Sweep will not be able to edit. In our example, Sweep is unable to modify the `.github` folder as we do not want Sweep to modify our GitHub Actions.

### `draft`
```yaml
draft: False
```
Possible Values: True, False

This setting determines whether or not to create pull requests as drafts. If this is set to `True`, then all pull requests will be created as drafts and **GitHub Actions will not be triggered**.

### `description`
```yaml
description: "project description and standards to follow"
```
This setting is the description of the repository that will be passed to Sweep. Please include details that Sweep may need to understand the repository. You may also include details about standards to follow here.

---

## Our Configuration File
This file is available [here](https://github.com/sweepai/sweep/blob/main/sweep.yaml). We have pasted this file below for your convenience.

```yaml
gha_enabled: True
branch: main
blocked_dirs: [".github/"]
draft: False
description: "sweepai/sweep is a python 3.10 project. The main api endpoints are in sweepai/api.py. Write code that adheres to PEP8."

rules:
- "Leftover TODOs in the code should be handled."
- "All new business logic should have corresponding unit tests in the tests/ directory."
- "Any clearly inefficient or repeated code should be optimized or refactored."
```
